#define DALI_COUNT 5

#include "../bulk_storage/bulk_storage.h"

/**

  I've given up on sane names for amino acid neighborhoods... Now we
  get code names for the new releases.  The first is daliesque, in
  reference to the Dali algorithm.  It uses the
  pairwise_distance_neighborhood stuff to do a Dali-style 6x6 amino
  acid matching for each neighborhood.

  \ingroup Neighborhoods

*/

struct daliesque {
  char pdbStructure[4];
  short aa_residue_serial;
  char chain;
  short paird[(DALI_COUNT * (DALI_COUNT+1)) / 2];
  //  unsigned char aa_indices[COUNT+1];
};

/**
   \ingroup NeighborhoodConstructor
*/
void daliesque_constructor(const char* pdbCode,
			   void * neighp,
			   struct store * atomStore,
			   off_t center,
			   off_t neighbors[],
			   short count);

/**
   \ingroup NeighborhoodDistance
*/
double daliesque_distance(struct daliesque * d1, struct daliesque * d2);

/**
   Because daliesque currently only relies on side-chain mass centers, this function just calls can_calculate_aa_mass_center.

   @return true if a mass center can be calculated for the amino acid that contains atom i.

   \ingroup CanCalculateNeighborhood 
*/
int daliesque_can_calculate_neighborhood(struct store * s, off_t i);

/**
   Print out dali neighborhood in a format appropriate for query result output
*/

const void * daliesque_print(const void * d, void * state);
